调用失败,如何排查?
解答:参见 网关异常排查。
API 返回的错误码是什么意思?
解答:参见 网关结果码说明。
如果引用了 okhttp,okio 和 mpaas 有冲突该怎么办?
解答:您需要完成以下两步操作以解决该冲突。
将 mpaas 的 wire 组件注释掉。
mpaascomponents{ excludeDependencies=['com.alipay.android.phone.thirdparty:wire-build'] }
使用公网提供的 wire 组件。
implementation 'com.squareup.wire:wire-lite-runtime:1.5.3.4@jar'
通过 JSAPI 调用 MGS RPC 接口向后端发送 POST 请求时,如何把参数放到POSTBODY 中?
解答:MGS 正确配置好 POST BODY 及对应的数据模型后,通过 JSAPI 发送请求时需要把 POST BODY 的内容作为 _requestBody
的值放在 requestData
参数中,参见下面的样例。
window.onload = function() {
ready(function() {
window.AlipayJSBridge.call('rpc', {
operationType: 'MYAPI',
requestData: [
{"_requestBody":"{\"key1\":\"value1\",\"key2\":\"value2\"}"}],
headers:{},
getResponse: true
}, function(data) {
alert(JSON.stringify(data));
});
});
}
离线包验签的流程是什么样的?
解答:为了保证离线包的安全性,开发者可以开启离线包验签功能。该过程既保证了离线包内容的完整性,也保证了离线包来源的正确性。
首先配置私钥和公钥。将私钥配置在服务端,用于对离线包的签名;将公钥配置在客户端,用于对签名的验证。
在 mPaaS 控制台的实时发布中下载 amr 文件。若配置了签名私钥,下载的 amr 文件即可携带签名信息。该签名信息为私钥对离线包的 Hash 值加密后得到的密文。
客户端在拿到 amr 包并解压后,会使用在项目中预置的公钥进行签名的验证。解密步骤 2 中的密文得到一个 hash 值,同时本地计算离线包的 hash 值,判断两者是否相同,如果相同则通过验证。
虽然离线包验签过程可以保证离线包在传输和加载过程中不被篡改,但由于客户端的控制权完整掌握在用户手中,该机制并不能完全阻止在客户端上恶意破解和篡改 H5 逻辑的行为。因此,开发者需注意在前端上存在的各种潜在的安全风险。例如,权限控制一定需要在后端验证,秒杀、抢购等行为需要后端配合进行时间戳验证等。
什么是移动网关?移动网关的作用是什么?
移动网关 RPC 是移动开发平台(mPaaS)提供的连接移动客户端与服务端的组件产品。该组件简化了移动端与服务端的数据协议和通讯协议,能够显著提升开发效率和网络通讯效率。移动网关是连接移动客户端与服务端的桥梁,移动客户端通过网关来访问后台服务接口。更多内容请参见 移动网关简介。
通过使用移动网关可以实现以下内容:
通过动态代理的方式,封装客户端与服务端之间的通讯。
如果服务端与客户端定义了一致的接口,可由服务端自动生成代码并导出给客户端使用。
对 RpcException 进行统一的异常处理,弹对话框、Toast 消息框等。
移动网关提供服务端 HTTP 服务签名验证功能,提高从网关到服务端的数据安全性。
在网关控制台开启某一 API 分组的签名校验后,移动网关会对该分组里面的每一个 API 请求创建签名信息,签名使用的公私钥可在网关控制台创建。
服务端读取签名字符串后,收到的请求进行本地签名进行计算,查看与收到的签名是否一致,以此来判断请求是否合法。
对客户端到移动网关的请求进行验签,以验证调用者身份保证安全。网关验证,默认打开;如需关闭请在配置文件中设置。
网关验签的验签流程是什么?
为保证客户端请求不被篡改和伪造,RPC 请求拥有签名机制,RPC 模块会自动实现加签功能。基本的加签、验签过程如下:
将 requestBody 中的内容转换为字符串。
使用无线保镖安全模块,通过保存在加密图片(即无线保镖图片)中的加密密钥,对转化的字符串进行加签。
将加密后的签名放在请求中发给网关。
网关使用相同方式签名,校验两个签名是否相等。
离线包验签与网关验签的异同点分别是什么?
相同点:
离线包验签和网关验签的目的都是为了保证客户端的安全,保护内容不被篡改。
离线包验签和网关验签都是对数据的校验。
不同点:
验证的产物不同:
离线验签验证的是离线包在下载之后、解压之前是否被修改。
网关验签验证的是 requestBody 是否被修改。
签名方式不同:
离线验签是由用户通过后台配置公钥以及私钥的方式签名。
网关验签是通过无线保镖获取签名。
验签失败的结果不同:
离线包验签失败不会导致 H5 页面失效,页面数据只能通过网络加载,不影响正常使用。
网关验签失败会导致向后台请求的数据后台校验失败或者前端获取到的数据解密失败时,App 的页面数据不能正常展示,影响正常使用。
网关验签时客户端通过代码发起 RPC 调用,但未能拿到预期结果,在控制台产生的错误码代表什么含义?
错误码 | 说明 | 原因 |
---|---|---|
7000 | 没有设置公钥 | 移动 App 的无线保镖中无 appId 对应的密钥或网关无法获取 appId 对应的签名密钥。 |
7001 | 验签的参数不够 | 网关服务端验证签名不通过。 |
7002 | 验签失败 | 网关服务端验证签名不通过。 |
7003 | 验签时效性失败 | API 请求入参 ts 时间戳超过系统设置的时间有效性,需要检查客户端时间是否为系统时间。 |
7007 | 验签缺少 ts 参数 | API 请求缺少验签 ts 参数。 |
7014 | 验签缺少 sign 参数 | API 请求缺少验签 sign 参数。一般情况下是客户端签名数据失败,导致缺失 sign 参数。请检查客户端无线保镖图片是否正确。 |
更多内容请参考 如何排查移动网关调用错误。
在离线包验签中有网的情况下,离线包应用可以正常打开;关闭网络,离线包应用无法打开。该如何排查?
请参考 如何排查移动网关调用错误。
在离线包验签中 H5 应用加载缓慢,该如何排查?
请参考 如何排查移动网关调用错误。